#ifndef __WIZ_BASE_TYPE_BASE_HPP__SHANHAOBO_19800429__
#define __WIZ_BASE_TYPE_BASE_HPP__SHANHAOBO_19800429__

#include "../Core/WizBaseCoreDeclare.hpp"

#include "../Core/WizBaseCoreTypeVoid.hpp"
#include "../Core/WizBaseCoreTypeBool.hpp"
#include "../Core/WizBaseCoreTypeInt.hpp"
#include "../Core/WizBaseCoreTypeReal.hpp"
#include "../Core/WizBaseCoreTypeChar.hpp"

#include <crtdefs.h>

//////////////////////////////////////////////////////////////////////////
#ifndef interface
#   define interface                struct
#endif /*interface*/
//////////////////////////////////////////////////////////////////////////

namespace Wiz
{
    namespace Null
    {
        struct Type
        {
            Type() {}
            Type(const Type&, const Type&) {}

            typedef Type tHead;
            typedef Type tTail;
        };

        template<typename ElementT>
        struct IsA
        {
            static const ::Wiz::Bool::Type Value = ::Wiz::Bool::False; 
        };

        template<>
        struct IsA<::Wiz::Null::Type>
        {
            static const ::Wiz::Bool::Type Value = ::Wiz::Bool::True; 
        };
    } /// end of namespace Null

    namespace PtrDiff
    {
        typedef ptrdiff_t  Type;
    } /// end of namespace PtrDiff
} /// end of namespace Wiz

#endif /*__WIZ_BASE_TYPE_BASE_HPP__SHANHAOBO_19800429__*/
